# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/27 09:54 
@Author  : ZhangShenao 
@File    : 2.使用RecursiveCharacterTextSplitter递归字符文档分割器.py 
@Desc    : 使用RecursiveCharacterTextSplitter递归字符文档分割器

使用RecursiveCharacterTextSplitter递归字符文档分割器,可以按照传入的分割字符列表,进行递归分割
对于不超过chunk_size的文档块,直接暂存起来
对于超过chunk_size的文档块,则使用下一个分隔符递归进行分割,并与暂存的小文档块进行合并
最终尽可能使每个文档分块的大小都接近chunk_size

"""
from langchain_community.document_loaders import UnstructuredMarkdownLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 创建Markdown文档加载器
loader = UnstructuredMarkdownLoader("./docs/项目API资料.md")

# 加载文档
docs = loader.load()

# 创建RecursiveCharacterTextSplitter,进行文档的递归分割
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,  # 指定文档分块大小
    chunk_overlap=50,  # 指定文档块之间的重叠部分大小
    add_start_index=True,  # 添加文档块的起始索引
)

# 使用RecursiveCharacterTextSplitter分割文档
chunks = splitter.split_documents(docs)

# 文档块大小不会超过500,但是可能会存在较小的块
for chunk in chunks:
    print(f'文档块大小: {len(chunk.page_content)}, 元数据: {chunk.metadata}')
